/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.deployment.entidade.protocolo;

import br.com.deployment.entidade.fermojupi.AtoItem;
import br.com.deployment.entidade.registroimovel.Folha;
import br.com.deployment.entidade.registroimovel.Livro;
import br.com.deployment.entidade.selo.Selo;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import javax.persistence.*;
import javax.validation.constraints.DecimalMin;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotNull;

/**
 *
 * @author roniere
 */
@Entity
public class ServicoProtocolo implements Serializable{
    
    @Id
    @SequenceGenerator(name = "seq_servicoProtocolo", sequenceName = "seq_servicoProtocolo", allocationSize=1 )
    @GeneratedValue(generator = "seq_servicoProtocolo", strategy = GenerationType.SEQUENCE)
    private int id;
    
    @OneToMany(fetch= FetchType.EAGER)
    private List<Selo> selos;
    
    @OneToOne
    private AtoItem atoItem;
    
    @Column(scale= 2, precision=19)
    @NotNull
    @DecimalMin( value = "0.00" )
    @Digits( fraction = 2, integer = 10 )
    private BigDecimal valorCartorio;
    
    @Column(scale= 2, precision=19)
    @NotNull
    @DecimalMin( value = "0.00" )
    @Digits( fraction = 2, integer = 10 )
    private BigDecimal valorFermojupi;
    
    @Column(scale= 2, precision=19)
    @NotNull
    @DecimalMin( value = "0.00" )
    @Digits( fraction = 2, integer = 10 )
    private BigDecimal valor;
    
    @OneToMany(cascade= CascadeType.ALL, fetch= FetchType.EAGER)
    private List<ProtocoloCampo> protocoloCampos;
    
    //TODO Colocar bidirecional
    @ManyToOne
    private Protocolo protocolo;
        
    @OneToOne
    private Livro livro;
    
    @OneToMany
    private List<Folha> folhas;
    
    @Column
    private String folhasString;

    public String getFolhasString() {
        return folhasString;
    }

    public void setFolhasString(String folhasString) {
        this.folhasString = folhasString;
    }

    
    
    public Protocolo getProtocolo() {
        return protocolo;
    }

    public void setProtocolo(Protocolo protocolo) {
        this.protocolo = protocolo;
    }

    public List<Folha> getFolhas() {
        return folhas;
    }

    public void setFolhas(List<Folha> folhas) {
        this.folhas = folhas;
    }

   

    public Livro getLivro() {
        return livro;
    }

    public void setLivro(Livro livro) {
        this.livro = livro;
    }

    
    public AtoItem getAtoItem() {
        return atoItem;
    }

    public List<ProtocoloCampo> getProtocoloCampos() {
        return protocoloCampos;
    }

    public void setProtocoloCampos(List<ProtocoloCampo> protocoloCampos) {
        this.protocoloCampos = protocoloCampos;
    }

    public void setAtoItem(AtoItem atoItem) {
        this.atoItem = atoItem;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public List<Selo> getSelos() {
        return selos;
    }

    public void setSelos(List<Selo> selos) {
        this.selos = selos;
    }

    public BigDecimal getValor() {
        return valor;
    }

    public void setValor(BigDecimal valor) {
        this.valor = valor;
    }

    public BigDecimal getValorCartorio() {
        return valorCartorio;
    }

    public void setValorCartorio(BigDecimal valorCartorio) {
        this.valorCartorio = valorCartorio;
    }

    public BigDecimal getValorFermojupi() {
        return valorFermojupi;
    }

    public void setValorFermojupi(BigDecimal valorFermojupi) {
        this.valorFermojupi = valorFermojupi;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final ServicoProtocolo other = (ServicoProtocolo) obj;
        if (this.id != other.id) {
            return false;
        }
        if (this.selos != other.selos && (this.selos == null || !this.selos.equals(other.selos))) {
            return false;
        }
        if (this.atoItem != other.atoItem && (this.atoItem == null || !this.atoItem.equals(other.atoItem))) {
            return false;
        }
        if (this.valorCartorio != other.valorCartorio && (this.valorCartorio == null || !this.valorCartorio.equals(other.valorCartorio))) {
            return false;
        }
        if (this.valorFermojupi != other.valorFermojupi && (this.valorFermojupi == null || !this.valorFermojupi.equals(other.valorFermojupi))) {
            return false;
        }
        if (this.valor != other.valor && (this.valor == null || !this.valor.equals(other.valor))) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 19 * hash + this.id;
        hash = 19 * hash + (this.selos != null ? this.selos.hashCode() : 0);
        hash = 19 * hash + (this.atoItem != null ? this.atoItem.hashCode() : 0);
        hash = 19 * hash + (this.valorCartorio != null ? this.valorCartorio.hashCode() : 0);
        hash = 19 * hash + (this.valorFermojupi != null ? this.valorFermojupi.hashCode() : 0);
        hash = 19 * hash + (this.valor != null ? this.valor.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return protocoloCampos+"ServicoProtocolo{" + "id=" + id + ", selos=" + selos + ", atoItem=" + atoItem + ", valorCartorio=" + valorCartorio + ", valorFermojupi=" + valorFermojupi + ", valor=" + valor + '}';
    }
    
    
}
